<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    <title>Unity WebGL Player | %UNITY_WEB_NAME%</title>
    <style>
        *{border:0;margin:0;padding:0}
    </style>
    <script src="%UNITY_WEBGL_LOADER_URL%"></script>
    <script>
        var storage = {};
        function getStorageValue(key, defaultValue){
            var v = storage[key];
            if(v === null){
                return defaultValue;
            }
            if(typeof v!== 'undefined'){
                return v;
            }
            return defaultValue;
        }
        var WXWASMSDK = {
            WXInitializeSDK(){
                gameInstance.SendMessage("WXSDKManagerHandler",'Inited', 200);
            },
            WXStorageSetIntSync: function (key, value) {
                storage[key] = value;
            },
            WXStorageGetIntSync: function (key, defaultValue) {
                return getStorageValue(key, defaultValue);
            },
            WXStorageSetFloatSync: function (key, value) {
                storage[key] = value;
            },
            WXStorageGetFloatSync: function (key, defaultValue) {
                return getStorageValue(key, defaultValue);
            },
            WXStorageSetStringSync: function (key, value) {
                storage[key] = value;
            },
            WXStorageGetStringSync: function (key, defaultValue) {
                return getStorageValue(key, defaultValue || '');
            },
            WXStorageDeleteAllSync: function () {
                storage = {};
            },
            WXStorageDeleteKeySync: function (key) {
                delete storage[key];
            },
            WXStorageHasKeySync: function (key) {
                return typeof storage[key] === 'undefined';
            },
            WXLogin: function (s, f, c) {},
            WXCheckSession: function (s, f, c) {},
            WXAuthorize: function (scope, s, f, c) {},
            WXGetUserInfo: function (withCredentials, lang, s, f, c) {},
            WXGetSystemLanguage: function(){},
            WXGetSystemInfo: function(s,f,c){},
            WXGetSystemInfoSync: function(){
                return "";
            },
            WXGetAccountInfoSync: function(){
                return '{"miniProgramRaw": "{}", "pluginRaw": "{}"}';
            },
            WXCreateUserInfoButton: function(x, y, width, height, lang, withCredentials){},
            WXUserInfoButtonShow: function(id){},
            WXUserInfoButtonDestroy: function(id){},
            WXUserInfoButtonHide: function(id){},
            WXUserInfoButtonOffTap: function(id){},
            WXUserInfoButtonOnTap: function(id){},
            WXUpdateShareMenu: function ( conf, s, f, c) {},
            WXShowShareMenu: function ( conf, s, f, c) {},
            WXHideShareMenu: function ( conf, s, f, c) {},
            WXShareAppMessage: function ( conf ) {},
            WXSetMessageToFriendQuery: function (num ) {},
            WXOnShareAppMessage: function (conf,isPromise) {},
            WXOnShareAppMessageResolve: function ( conf ) {},
            WXOnShareTimeline: function ( conf, needCallback ) {},
            WXOnAddToFavorites: function ( conf, needCallback ) {},
            WXOffShareTimeline: function ( ) {},
            WXOffShareAppMessage: function ( ) {},
            WXOffAddToFavorites: function ( ) {},
            WXGetShareInfo: function (conf, s, f, c) {},
            WXAuthPrivateMessage: function (conf, s, f, c) {},
            WXCreateBannerAd: function (conf) {
                return Math.random().toString(32);
            },
            WXCreateRewardedVideoAd: function (conf) {
                return Math.random().toString(32);
            },
            WXCreateInterstitialAd: function (conf) {
                return Math.random().toString(32);
            },
            WXCreateGridAd: function (conf) {},
            WXCreateCustomAd: function (conf) {},
            WXADStyleChange: function (id,key,value) {},
            WXShowAd: function (id) {},
            WXHideAd: function (id) {},
            WXADGetStyleValue: function (id,key) {},
            WXADDestroy: function (id) {},
            WXADLoad: function (id,succ,fail) {},
            WXGetLaunchOptionsSync: function () {},
            WXToTempFilePathSync: function (conf) {},
            WXGetUserDataPath: function () {},
            WXWriteFileSync: function (filePath, data, encoding) {},
            WXCreateFixedBottomMiddleBannerAd: function (adUnitId, adIntervals, height) {
                return Math.random().toString(32);
            },
            WXReportGameStart:function(){},
            WXReportGameSceneError: function(sceneId, errorType, errStr, extJsonStr) {},
            WXWriteLog: function(str) {},
            WXWriteWarn: function(str) {},
            WXHideLoadingPage: function() {},
            WXPreloadConcurrent: function() {},
            WXSetUserCloudStorage:function(){},
            WXCreateInnerAudioContext:function(){
                return Math.random().toString(32);
            },
            WXInnerAudioContextSetBool:function(){},
            WXInnerAudioContextSetString:function(){},
            WXInnerAudioContextSetFloat:function(){},
            WXInnerAudioContextGetFloat:function(){},
            WXInnerAudioContextGetBool:function(){},
            WXInnerAudioContextPlay:function(){},
            WXInnerAudioContextPause:function(){},
            WXInnerAudioContextStop:function(){},
            WXInnerAudioContextDestroy:function(){},
            WXInnerAudioContextSeek:function(){},
            WXInnerAudioContextAddListener:function(id,key){
                if(key==="onCanplay"){
                    setTimeout(function(){
                        gameInstance.SendMessage("WXSDKManagerHandler",'OnAudioCallback',JSON.stringify({
                            callbackId:id,
                            errMsg:key
                        }));
                    },100)
                }
            },
            WXInnerAudioContextRemoveListener:function(){},
            WXPreDownloadAudios:function(paths,id){
                gameInstance.SendMessage("WXSDKManagerHandler",'WXPreDownloadAudiosCallback',JSON.stringify({
                    callbackId:id.toString(),
                    errMsg:"0"
                }));
            },
            WXCreateVideo:function(){
                return Math.random().toString(32);
            },
            WXVideoPlay:function(){},
            WXVideoAddListener:function(){},
            WXVideoDestroy:function(){},
            WXVideoExitFullScreen:function(){},
            WXVideoPause:function(){},
            WXVideoRequestFullScreen:function (){},
            WXVideoSeek:function(){},
            WXVideoStop:function(){},
            WXVideoRemoveListener:function(){},
            WXShowOpenData:function(){},
            WXDownloadTexture(id,type,callback){
                var Infos = {
                    "Texture":GameGlobal.TextureConfig,
                    "SpriteAtlas":GameGlobal.SpriteAtlasConfig
                }[type];
                if(!Infos[id]){
                    return console.error(type + "映射id 不存在",id);
                }
                var path = Infos[id].p;
                var cid = type+"_"+id;
                if(downloadedTextures[cid]){
                    if(downloadedTextures[cid].data){
                        callback();
                    }else{
                        console.error(type + "映射id data 不存在！",id);
                    }
                }else if(downloadingTextures[cid]){
                    downloadingTextures[cid].push(callback);
                }else{
                    downloadingTextures[cid] = [callback];
                    textureHandler.downloadFile(id,type,GameGlobal.AUDIO_PREFIX.replace(/\/$/,'')+'/'+path.replace(/\\/g,'/'));
                }
            },
            WXShowKeyboard(){},
            WXUpdateKeyboard(){},
            WXHideKeyboard(){},
            WXGetNetworkType(){},
            WXCreateGameClubButton() {
                return Math.random().toString(32);
            },
            WXGameClubButtonDestroy() {},
            WXGameClubButtonHide() {},
            WXGameClubButtonShow() {},
            WXGameClubButtonAddListener() {},
            WXGameClubButtonRemoveListener() {},
            WXGameClubButtonSetProperty() {},
            WXGameClubStyleChangeInt() {},
            WXGameClubStyleChangeStr() {},
            WXNavigateToMiniProgram() {},
            WXExitMiniProgram() {},
            WXSetKeepScreenOn(){},
            WXIsCloudTest(){ return false;},
            WXUncaughtException(){},
            WXSetDataCDN() {},
            WXSetPreloadList() {},
            WXReportScene() {},
            WXGetCachePath() {},
            WXGetPluginCachePath() {},
                WX_AddCard(conf, callbackId){
    },
    WX_AuthPrivateMessage(conf, callbackId){
    },
    WX_Authorize(conf, callbackId){
    },
    WX_CheckIsUserAdvisedToRest(conf, callbackId){
    },
    WX_CheckSession(conf, callbackId){
    },
    WX_ChooseImage(conf, callbackId){
    },
    WX_ChooseMedia(conf, callbackId){
    },
    WX_ChooseMessageFile(conf, callbackId){
    },
    WX_CloseBLEConnection(conf, callbackId){
    },
    WX_CloseBluetoothAdapter(conf, callbackId){
    },
    WX_CloseSocket(conf, callbackId){
    },
    WX_CreateBLEConnection(conf, callbackId){
    },
    WX_CreateBLEPeripheralServer(conf, callbackId){
    },
    WX_ExitMiniProgram(conf, callbackId){
    },
    WX_ExitVoIPChat(conf, callbackId){
    },
    WX_FaceDetect(conf, callbackId){
    },
    WX_GetAvailableAudioSources(conf, callbackId){
    },
    WX_GetBLEDeviceCharacteristics(conf, callbackId){
    },
    WX_GetBLEDeviceRSSI(conf, callbackId){
    },
    WX_GetBLEDeviceServices(conf, callbackId){
    },
    WX_GetBLEMTU(conf, callbackId){
    },
    WX_GetBatteryInfo(conf, callbackId){
    },
    WX_GetBeacons(conf, callbackId){
    },
    WX_GetBluetoothAdapterState(conf, callbackId){
    },
    WX_GetBluetoothDevices(conf, callbackId){
    },
    WX_GetChannelsLiveInfo(conf, callbackId){
    },
    WX_GetChannelsLiveNoticeInfo(conf, callbackId){
    },
    WX_GetClipboardData(conf, callbackId){
    },
    WX_GetConnectedBluetoothDevices(conf, callbackId){
    },
    WX_GetExtConfig(conf, callbackId){
    },
    WX_GetFileInfo(conf, callbackId){
    },
    WX_GetGroupEnterInfo(conf, callbackId){
    },
    WX_GetLocalIPAddress(conf, callbackId){
    },
    WX_GetLocation(conf, callbackId){
    },
    WX_GetNetworkType(conf, callbackId){
    },
    WX_GetScreenBrightness(conf, callbackId){
    },
    WX_GetSetting(conf, callbackId){
    },
    WX_GetShareInfo(conf, callbackId){
    },
    WX_GetStorageInfo(conf, callbackId){
    },
    WX_GetSystemInfo(conf, callbackId){
    },
    WX_GetSystemInfoAsync(conf, callbackId){
    },
    WX_GetUserInfo(conf, callbackId){
    },
    WX_GetUserInteractiveStorage(conf, callbackId){
    },
    WX_GetWeRunData(conf, callbackId){
    },
    WX_HideKeyboard(conf, callbackId){
    },
    WX_HideLoading(conf, callbackId){
    },
    WX_HideShareMenu(conf, callbackId){
    },
    WX_HideToast(conf, callbackId){
    },
    WX_InitFaceDetect(conf, callbackId){
    },
    WX_IsBluetoothDevicePaired(conf, callbackId){
    },
    WX_JoinVoIPChat(conf, callbackId){
    },
    WX_Login(conf, callbackId){
    },
    WX_MakeBluetoothPair(conf, callbackId){
    },
    WX_NavigateToMiniProgram(conf, callbackId){
    },
    WX_NotifyBLECharacteristicValueChange(conf, callbackId){
    },
    WX_OpenBluetoothAdapter(conf, callbackId){
    },
    WX_OpenCard(conf, callbackId){
    },
    WX_OpenChannelsActivity(conf, callbackId){
    },
    WX_OpenChannelsEvent(conf, callbackId){
    },
    WX_OpenChannelsLive(conf, callbackId){
    },
    WX_OpenChannelsUserProfile(conf, callbackId){
    },
    WX_OpenCustomerServiceConversation(conf, callbackId){
    },
    WX_OpenSetting(conf, callbackId){
    },
    WX_PreviewImage(conf, callbackId){
    },
    WX_PreviewMedia(conf, callbackId){
    },
    WX_ReadBLECharacteristicValue(conf, callbackId){
    },
    WX_RemoveStorage(conf, callbackId){
    },
    WX_RemoveUserCloudStorage(conf, callbackId){
    },
    WX_RequestMidasFriendPayment(conf, callbackId){
    },
    WX_RequestMidasPayment(conf, callbackId){
    },
    WX_RequestSubscribeMessage(conf, callbackId){
    },
    WX_RequestSubscribeSystemMessage(conf, callbackId){
    },
    WX_SaveFileToDisk(conf, callbackId){
    },
    WX_SaveImageToPhotosAlbum(conf, callbackId){
    },
    WX_ScanCode(conf, callbackId){
    },
    WX_SendSocketMessage(conf, callbackId){
    },
    WX_SetBLEMTU(conf, callbackId){
    },
    WX_SetClipboardData(conf, callbackId){
    },
    WX_SetEnableDebug(conf, callbackId){
    },
    WX_SetInnerAudioOption(conf, callbackId){
    },
    WX_SetKeepScreenOn(conf, callbackId){
    },
    WX_SetMenuStyle(conf, callbackId){
    },
    WX_SetScreenBrightness(conf, callbackId){
    },
    WX_SetStatusBarStyle(conf, callbackId){
    },
    WX_SetUserCloudStorage(conf, callbackId){
    },
    WX_ShowActionSheet(conf, callbackId){
    },
    WX_ShowKeyboard(conf, callbackId){
    },
    WX_ShowLoading(conf, callbackId){
    },
    WX_ShowModal(conf, callbackId){
    },
    WX_ShowShareImageMenu(conf, callbackId){
    },
    WX_ShowShareMenu(conf, callbackId){
    },
    WX_ShowToast(conf, callbackId){
    },
    WX_StartAccelerometer(conf, callbackId){
    },
    WX_StartBeaconDiscovery(conf, callbackId){
    },
    WX_StartBluetoothDevicesDiscovery(conf, callbackId){
    },
    WX_StartCompass(conf, callbackId){
    },
    WX_StartDeviceMotionListening(conf, callbackId){
    },
    WX_StartGyroscope(conf, callbackId){
    },
    WX_StopAccelerometer(conf, callbackId){
    },
    WX_StopBeaconDiscovery(conf, callbackId){
    },
    WX_StopBluetoothDevicesDiscovery(conf, callbackId){
    },
    WX_StopCompass(conf, callbackId){
    },
    WX_StopDeviceMotionListening(conf, callbackId){
    },
    WX_StopFaceDetect(conf, callbackId){
    },
    WX_StopGyroscope(conf, callbackId){
    },
    WX_UpdateKeyboard(conf, callbackId){
    },
    WX_UpdateShareMenu(conf, callbackId){
    },
    WX_UpdateVoIPChatMuteConfig(conf, callbackId){
    },
    WX_UpdateWeChatApp(conf, callbackId){
    },
    WX_VibrateLong(conf, callbackId){
    },
    WX_VibrateShort(conf, callbackId){
    },
    WX_WriteBLECharacteristicValue(conf, callbackId){
    },
    WX_StartGameLive(conf, callbackId){
    },
    WX_CheckGameLiveEnabled(conf, callbackId){
    },
    WX_GetUserCurrentGameliveInfo(conf, callbackId){
    },
    WX_GetUserRecentGameLiveInfo(conf, callbackId){
    },
    WX_GetUserGameLiveDetails(conf, callbackId){
    },
    WX_OpenChannelsLiveCollection(conf, callbackId){
    },
    WX_OpenPage(conf, callbackId){
    },
    WX_GetGameClubData(conf, callbackId){
    },

    WX_RemoveStorageSync(){
    },
    WX_ReportEvent(){
    },
    WX_ReportMonitor(){
    },
    WX_ReportPerformance(){
    },
    WX_ReportUserBehaviorBranchAnalytics(){
    },
    WX_ReserveChannelsLive(){
    },
    WX_RestartMiniProgram(){
    },
    WX_RevokeBufferURL(){
    },
    WX_SetPreferredFramesPerSecond(){
    },
    WX_SetStorageSync(){
    },
    WX_ShareAppMessage(){
    },
    WX_TriggerGC(){
    },
    WX_StopDownloadTexture(){
    },
    WX_StarDownloadTexture(){
    },

    WX_OnAccelerometerChange(){
    },
    WX_OffAccelerometerChange(){
    },
    WX_OnAudioInterruptionBegin(){
    },
    WX_OffAudioInterruptionBegin(){
    },
    WX_OnAudioInterruptionEnd(){
    },
    WX_OffAudioInterruptionEnd(){
    },
    WX_OnBLECharacteristicValueChange(){
    },
    WX_OffBLECharacteristicValueChange(){
    },
    WX_OnBLEConnectionStateChange(){
    },
    WX_OffBLEConnectionStateChange(){
    },
    WX_OnBLEMTUChange(){
    },
    WX_OffBLEMTUChange(){
    },
    WX_OnBLEPeripheralConnectionStateChanged(){
    },
    WX_OffBLEPeripheralConnectionStateChanged(){
    },
    WX_OnBeaconServiceChange(){
    },
    WX_OffBeaconServiceChange(){
    },
    WX_OnBeaconUpdate(){
    },
    WX_OffBeaconUpdate(){
    },
    WX_OnBluetoothAdapterStateChange(){
    },
    WX_OffBluetoothAdapterStateChange(){
    },
    WX_OnBluetoothDeviceFound(){
    },
    WX_OffBluetoothDeviceFound(){
    },
    WX_OnCompassChange(){
    },
    WX_OffCompassChange(){
    },
    WX_OnDeviceMotionChange(){
    },
    WX_OffDeviceMotionChange(){
    },
    WX_OnDeviceOrientationChange(){
    },
    WX_OffDeviceOrientationChange(){
    },
    WX_OnError(){
    },
    WX_OffError(){
    },
    WX_OnGyroscopeChange(){
    },
    WX_OffGyroscopeChange(){
    },
    WX_OnHide(){
    },
    WX_OffHide(){
    },
    WX_OnInteractiveStorageModified(){
    },
    WX_OffInteractiveStorageModified(){
    },
    WX_OnKeyDown(){
    },
    WX_OffKeyDown(){
    },
    WX_OnKeyUp(){
    },
    WX_OffKeyUp(){
    },
    WX_OnKeyboardComplete(){
    },
    WX_OffKeyboardComplete(){
    },
    WX_OnKeyboardConfirm(){
    },
    WX_OffKeyboardConfirm(){
    },
    WX_OnKeyboardHeightChange(){
    },
    WX_OffKeyboardHeightChange(){
    },
    WX_OnKeyboardInput(){
    },
    WX_OffKeyboardInput(){
    },
    WX_OnMemoryWarning(){
    },
    WX_OffMemoryWarning(){
    },
    WX_OnMessage(){
    },
    WX_OffMessage(){
    },
    WX_OnNetworkStatusChange(){
    },
    WX_OffNetworkStatusChange(){
    },
    WX_OnNetworkWeakChange(){
    },
    WX_OffNetworkWeakChange(){
    },
    WX_OnShareMessageToFriend(){
    },
    WX_OffShareMessageToFriend(){
    },
    WX_OnShow(){
    },
    WX_OffShow(){
    },
    WX_OnSocketClose(){
    },
    WX_OffSocketClose(){
    },
    WX_OnSocketError(){
    },
    WX_OffSocketError(){
    },
    WX_OnSocketMessage(){
    },
    WX_OffSocketMessage(){
    },
    WX_OnSocketOpen(){
    },
    WX_OffSocketOpen(){
    },
    WX_OnTouchCancel(){
    },
    WX_OffTouchCancel(){
    },
    WX_OnTouchEnd(){
    },
    WX_OffTouchEnd(){
    },
    WX_OnTouchMove(){
    },
    WX_OffTouchMove(){
    },
    WX_OnTouchStart(){
    },
    WX_OffTouchStart(){
    },
    WX_OnUnhandledRejection(){
    },
    WX_OffUnhandledRejection(){
    },
    WX_OnUserCaptureScreen(){
    },
    WX_OffUserCaptureScreen(){
    },
    WX_OnVoIPChatInterrupted(){
    },
    WX_OffVoIPChatInterrupted(){
    },
    WX_OnVoIPChatMembersChanged(){
    },
    WX_OffVoIPChatMembersChanged(){
    },
    WX_OnVoIPChatSpeakersChanged(){
    },
    WX_OffVoIPChatSpeakersChanged(){
    },
    WX_OnVoIPChatStateChanged(){
    },
    WX_OffVoIPChatStateChanged(){
    },
    WX_OnWindowResize(){
    },
    WX_OffWindowResize(){
    },

    WX_OnAddToFavorites(){
    },
    WX_OnAddToFavorites_Resolve(conf){
    },
    WX_OffAddToFavorites(){
    },
    WX_OnCopyUrl(){
    },
    WX_OnCopyUrl_Resolve(conf){
    },
    WX_OffCopyUrl(){
    },
    WX_OnHandoff(){
    },
    WX_OnHandoff_Resolve(conf){
    },
    WX_OffHandoff(){
    },
    WX_OnShareTimeline(){
    },
    WX_OnShareTimeline_Resolve(conf){
    },
    WX_OffShareTimeline(){
    },
    WX_OnGameLiveStateChange(){
    },
    WX_OnGameLiveStateChange_Resolve(conf){
    },
    WX_OffGameLiveStateChange(){
    },

    WX_SetHandoffQuery(query){
        return "";
    },
    WX_GetAccountInfoSync(){
        return JSON.stringify({});
    },
    WX_GetBatteryInfoSync(){
        return JSON.stringify({});
    },
    WX_GetEnterOptionsSync(){
        return JSON.stringify({});
    },
    WX_GetExptInfoSync(keys){
        return JSON.stringify({});
    },
    WX_GetExtConfigSync(){
        return JSON.stringify({});
    },
    WX_GetLaunchOptionsSync(){
        return JSON.stringify({});
    },
    WX_GetMenuButtonBoundingClientRect(){
        return JSON.stringify({});
    },
    WX_GetStorageInfoSync(){
        return JSON.stringify({});
    },
    WX_GetSystemInfoSync(){
        return JSON.stringify({});
    },
    WX_SetCursor(path,x,y){
        return "";
    },
    WX_SetMessageToFriendQuery(option){
        return "";
    },
    WX_GetTextLineHeight(option){
        return "";
    },
    WX_LoadFont(path){
        return "";
    },
    WX_GetGameLiveState(){
        return JSON.stringify({});
    },

        };
        var downloadedTextures = {};
        var downloadingTextures = {};
        var textureHandler = {
            downloadFile(textureId,type,prefix){
                var url = prefix+'.png';
                var cid = type+"_"+textureId;
                var image = new Image();
                image.src = url;
                image.onload = function () {
                    downloadedTextures[cid] = {
                        data:image
                    };
                    if(downloadingTextures[cid] instanceof Array){
                        downloadingTextures[cid].forEach(v=>v());
                    }else{
                        downloadingTextures[cid]();
                    }
                    delete downloadingTextures[cid];
                };
                image.onerror = function(){
                    console.error(url+" 下载失败！");
                }
            }
        };

        var GameGlobal = {
            TextureConfig:{},
            SpriteAtlasConfig:{},
            DownloadedTextures: downloadedTextures,
            AUDIO_PREFIX:"./Assets/Textures/"
        };
        window._ScaleRate = 1;
    </script>
    <script src="./texture-config.js"></script>
    <script>
        var gameInstance = UnityLoader.instantiate("gameContainer", "%UNITY_WEBGL_BUILD_URL%");
    </script>
</head>

<body>
<div id="gameContainer" style="width:100%; height:100%; margin: auto"></div>
<script>
    document.addEventListener('DOMContentLoaded',function(){
        var div = document.getElementById('gameContainer');
        div.style.width = window.innerWidth+"px";
        div.style.height = window.innerHeight+"px";
        window.canvas = document.getElementsByTagName('canvas')[0];
    });
</script>
</body>

</html>
